package com.blueocean_health.care.management.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.blueocean_health.care.management.domain.base.Power;
import com.blueocean_health.care.management.domain.base.Role;
import com.blueocean_health.care.management.domain.dto.RoleAuthDto;
import com.blueocean_health.care.management.domain.dto.RoleDto;
import com.blueocean_health.care.management.domain.dto.RoleListDto;
import com.blueocean_health.care.management.domain.vo.ModuleVo;
import com.blueocean_health.care.management.domain.vo.RoleVo;
import com.blueocean_health.care.management.util.MyMapper;

public interface RoleMapper extends MyMapper<Role> {

	/**
	 * 保存角色基本信息
	 * @return
	 */
	int addRoleBase(Role role);

	/**
	 *  更新角色基本信息
	 * @return
	 */
	int updateRoleByRoleId(RoleVo roleVo);

	/**
	 * 删除角色
	 * @param id
	 * @param string
	 * @return
	 */
	int updateStatusByRoleId(Integer id);

	/**
	 * 判断角色名称唯一(只约束同级)
	 * @return
	 */
	RoleVo findFirstSubRoleByName(RoleVo roleVo);

	/**
	 * 获取角色详情
	 * @param id
	 * @return
	 */
	RoleDto query(Integer id);
	
	/**
	 * 获取授权信息详情
	 * @param id
	 * @return
	 */
	RoleAuthDto queryAuthDetail(@Param("roleId")Integer id, @Param("orgId")Integer orgId);
	
	/**
	 * 获取通用角色授权信息详情
	 * @param id
	 * @return
	 */
	RoleAuthDto queryAuthPublicDetail(@Param("roleId")Integer id, @Param("orgId")Integer orgId);

	/**
	 * 启用禁用角色基本信息
	 * @param id
	 * @param status
	 * @return
	 */
	int updateRoleBaseStatusByRoleId(@Param("roleId")Integer roleId, @Param("status")Integer status);

	/**
	 * 当前用户，组织/项目下的所有角色 
	 * @return
	 */
	List<RoleDto> findAllRoleByUserIdAndOrgId(@Param("userId")Integer userId, @Param("orgId")Integer orgId);
	
	/**
	 * 角色列表 
	 * @param roleListDto
	 * @return
	 */
	List<RoleDto> list(RoleListDto roleListDto);
	

	/**
	 * 查看组织及所有下级组织的所有角色
	 * @param code
	 * @return
	 */
	List<RoleVo> findRoleLikeOrgCode(String code);

	/**
	 * 批量更新角色状态
	 * @param roleList
	 * @param status
	 * @return
	 */
	int batchUpdateRoleStatus(@Param("roleList")List<RoleVo> roleList, @Param("status")String status);
	
	/**
	 * 根据用户id以及用户所属组织查询出对应的所有角色对应权限的并集
	 * @param paramsMap
	 * @return
	 */
	List<Map<String, String>> findRolePowerByUserIdAndTeamId(Map<String, String> paramsMap);
	
	/**
	 * 组织可用模块和权限列表取交集
	 * @param paramsMap
	 * @return
	 */
	List<ModuleVo> findUserPermissionsByUserIdAndTeamId(Map<String, String> paramsMap);
	
	/**
	 * 权限列表取并集
	 * @param paramsMap
	 * @return
	 */
	List<String> findAllUserPermissionByUserIdAndTeamId(Map<String, String> paramsMap);
	
	/**
	 * 查询组织的所有权限
	 * @param paramsMap
	 * @return
	 */
	List<String> findTeamPowersByTeamId(Map<String, String> paramsMap);

	
	/**
	 * 根据角色id列表查询所有权限
	* @Title: findAllPowerByRoleIds
	* @param roleIds
	* @return
	* List<Power>
	* @version V1.0
	* @throws
	 */
	List<Power> findAllPowerByRoleIds(@Param("roleIds") List<Integer> roleIds);
	
	/**
	 * 根据类型查询所有权限
	* @Title: findAllPowerByType
	* @param type
	* @return
	* List<Power>
	* @version V1.0
	* @throws
	 */
	List<Power> findAllPowerByType(@Param("type") Integer type);
	
}